Skip to content

fix(release): assert GHCR images are actually anonymously pullable - #220

Merged
cursor[bot] merged 1 commit into
mainfrom
santosh/ghcr-public-release-smoke-849b
Sep 2, 2026
Merged

fix(release): assert GHCR images are actually anonymously pullable#220
cursor[bot] merged 1 commit into
mainfrom
santosh/ghcr-public-release-smoke-849b

Conversation

@santoshkumarradha

@santoshkumarradha santoshkumarradha commented Sep 2, 2026

Copy link
Copy Markdown
Member

Summary

Release smoke on main (e989626, run 33667714839) failed while asserting that af-stack init can pull the freshly published images with no registry login.

Two bugs in that assert, plus the underlying GHCR default:

  1. Crash on the first private package. curl -f against ghcr.io/token returns 401 with an empty body for private packages, then json.load dies (Expecting value) before the loop can list which images are private.
  2. 404 on public OCI manifests. Even af-stack-supportdesk-agent (already public, tag 0.13.0) 404s unless Accept includes application/vnd.oci.image.manifest.v1+json. After the three private packages were flipped public, the old check would still have failed.
  3. GHCR packages default to private. af-stack-runtime, af-stack-dashboard, and af-stack-customer-app are still private. The REST API cannot change visibility for these org-owned container packages (PATCH 404). An org owner must set them Public once in the UI.

This PR hardens the gate, tries to set visibility after each image push, and documents the one-time owner action.

Related issue

Unblocks the failed Release after #219 (feat(init): scaffolded apps carry their own backend).

Changes

  • scripts/assert-ghcr-public.sh — no curl -f; lists every private package; OCI image-manifest Accept header.
  • scripts/publish-ghcr-packages.sh — after push, try PATCH visibility=public; print the package-settings URL on 404.
  • Release workflow calls both (publish is continue-on-error; the anonymous-pull assert still fails closed).
  • Docs: docs/releasing.md (GHCR visibility section) and docs/branch-protection.md.

Test plan

Notes for reviewers

Do not drop the anonymous-pull assert or mark it continue-on-error. af-stack init has no docker login. A green Release with private images would ship a CLI whose scaffolds cannot boot.

fix(release): will re-trigger Release after merge (range still includes the #219 feat, so the version stays 0.13.0 until v0.13.0 exists). That retry is useful only after the three packages are public — or if Actions GITHUB_TOKEN can PATCH visibility (it could not from this environment).

af-stack-supportdesk-agent is already public.

Open in Web Open in Cursor 

The smoke gate crashed on the first private package's 401 (curl -f plus
JSON parse) before it could list which images af-stack init cannot pull.
It would also have 404'd public OCI manifests after packages were made
public, because the Accept header omitted vnd.oci.image.manifest.

After each image push, try to set the GHCR package public. The REST API
often 404s for org-owned containers — that is a one-time org-owner click
in package settings, documented in docs/releasing.md.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Santosh kumar <santoshkumarradha@users.noreply.github.com>
@santoshkumarradha
santoshkumarradha marked this pull request as ready for review September 2, 2026 18:47
@cursor
cursor Bot merged commit 925b7ae into main Sep 2, 2026
30 checks passed
@cursor
cursor Bot deleted the santosh/ghcr-public-release-smoke-849b branch September 2, 2026 18:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants